def print_gobang_board(size: int = 15) -> None:
    """
    终极对齐版五子棋棋盘：四边完全对整+上下边框精准匹配+内部结构规整
    核心优化：统一计算总宽度，确保顶部/底部/中间主体宽度100%一致
    """
    # 参数校验
    if not isinstance(size, int) or size < 5:
        raise ValueError("棋盘尺寸必须是≥5的整数（推荐15）")
    
    # 基础配置（确保对齐的核心参数）
    CELL_WIDTH = 3  # 每个单元格固定宽度
    ROW_NUM_WIDTH = 2  # 行号固定宽度（右对齐）
    # 字符定义（统一风格，避免视觉偏差）
    BOLD_H = "═"    # 加粗横线（四边）
    BOLD_V = "║"    # 加粗竖线（四边）
    THIN_H = "─"    # 内部细线（横线）
    THIN_V = "│"    # 内部细线（竖线）
    # 转角/交叉符（严格对应线条衔接）
    CORNER_TL = "╔"  # 左上转角
    CORNER_TR = "╗"  # 右上转角
    CORNER_BL = "╚"  # 左下转角
    CORNER_BR = "╝"  # 右下转角
    CROSS_TOP = "╦"  # 顶部中间交叉（加粗横+细竖）
    CROSS_BOTTOM = "╩"  # 底部中间交叉（加粗横+细竖）
    CROSS_LEFT = "╠"  # 左侧中间交叉（加粗竖+细横）
    CROSS_RIGHT = "╣"  # 右侧中间交叉（加粗竖+细横）
    CROSS_CENTER = "┼"  # 内部交叉（细横+细竖）
    INTERSECTION = "·"  # 空交叉点（居中）
    # 关键计算：中间主体宽度（不含行号），确保上下边框与主体对齐
    # 主体宽度 = 左右加粗竖线(2) + 单元格总宽度(CELL_WIDTH×size) + 内部竖线数(size-1)
    main_width = 2 + (CELL_WIDTH * size) + (size - 1)
    
    # 1. 打印顶部加粗边框（总宽度 = 行号宽度 + 主体宽度，与下方完全对齐）
    top_border = [CORNER_TL]
    for i in range(size):
        top_border.append(BOLD_H * CELL_WIDTH)
        top_border.append(CROSS_TOP if i < size - 1 else CORNER_TR)
    # 行号位置补空格，确保顶部边框总宽度 = 行号宽度 + 主体宽度
    print(f"{'':{ROW_NUM_WIDTH}}{''.join(top_border)}")

    # 2. 打印棋盘主体（竖线行 + 内部横线）
    for row in range(size):
        # 打印竖线行（与顶部边框宽度严格一致）
        vertical_line = [BOLD_V]
        for col in range(size):
            vertical_line.append(f"{INTERSECTION:^{CELL_WIDTH}}")  # 单元格居中
            vertical_line.append(THIN_V if col < size - 1 else BOLD_V)
        # 行号+竖线行，总宽度 = 行号宽度 + 主体宽度
        print(f"{row+1:^{ROW_NUM_WIDTH}}{''.join(vertical_line)}")

        # 3. 打印内部横线（最后一行不打印，宽度与主体匹配）
        if row < size - 1:
            mid_border = [CROSS_LEFT]
            for col in range(size):
                mid_border.append(THIN_H * CELL_WIDTH)
                mid_border.append(CROSS_CENTER if col < size - 1 else CROSS_RIGHT)
            # 行号位置补空格，宽度对齐
            print(f"{'':{ROW_NUM_WIDTH}}{''.join(mid_border)}")

    # 4. 打印底部加粗边框（与顶部边框完全对称，宽度一致）
    bottom_border = [CORNER_BL]
    for i in range(size):
        bottom_border.append(BOLD_H * CELL_WIDTH)
        bottom_border.append(CROSS_BOTTOM if i < size - 1 else CORNER_BR)
    # 行号位置补空格，确保底部边框与顶部、中间对齐
    print(f"{'':{ROW_NUM_WIDTH}}{''.join(bottom_border)}")

    # 5. 打印底部横向坐标（与列精准对齐，总宽度匹配）
    coord_line = [f"{'':{ROW_NUM_WIDTH}}"]  # 抵消行号宽度
    for i in range(size):
        coord_line.append(f"{chr(ord('A') + i):^{CELL_WIDTH}}")
    print("".join(coord_line))


# -------------- 调用示例 --------------
if __name__ == "__main__":
    try:
        print("【标准15x15五子棋棋盘（四边完全对整版）】")
        print_gobang_board(size=15)

        # 测试小尺寸棋盘（依然保持四边对齐）
        # print("\n【8x8五子棋棋盘（四边完全对整版）】")
        # print_gobang_board(size=8)
    except ValueError as e:
        print(f"错误：{e}")